#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>

#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <vector>
#include <set>
#include <map>
#include <algorithm>

#include <test.h>
#include <heap_sort.h>

using namespace std;
using namespace Y;

class StdSortTest : public ISortTest {
protected:
    string GetName() const {
        return "std::sort";
    }

    void Sort(vector<int> &v) {
        std::sort(v.begin(), v.end());
    }
};

int main() {
    {
        cout << "Heap sort" << endl;
        HeapSortTest test;
        TTestResult res = test.Test(10 * 1000*1000);
        cout << "test: "        << res.Name << endl
             << "inputSize: "   << res.InputSize << endl
             << "runTime: "     << res.RunTime << endl;
    }

    {
        cout << "std qsort" << endl;
        StdSortTest test;
        TTestResult res = test.Test(10 * 1000*1000);
        cout << "test: "        << res.Name << endl
             << "inputSize: "   << res.InputSize << endl
             << "runTime: "     << res.RunTime << endl;
    }
    /*
    fopen() Открывает файл
    fclose()    Закрывает файл
    putc()  Записывает символ в файл
    fputc() То же, что и putc()
    getc()  Читает символ из файла
    fgetc() То же, что и getc()
    fgets() Читает строку из файла
    fputs() Записывает строку в файл
    fseek() Устанавливает указатель текущей позиции на определенный байт файла
    ftell() Возвращает текущее значение указателя текущей позиции в файле
    fprintf()   Для файла то же, что printf() для консоли
    fscanf()    Для файла то же, что scanf() для консоли
    feof()  Возвращает значение true (истина), если достигнут конец файла
    ferror()    Возвращает значение true (истина), если произошла ошибка
    rewind()    Устанавливает указатель текущей позиции в начало файла
    remove()    Стирает файл
    fflush()    Дозапись потока в файл
    */
    /*
    FILE *fp = fopen("./f.txt", "w");
    fputc('q', fp);
    fputc('\n', fp);
    fputs("hello\n", fp);
    fprintf(fp, "Some number: %d\n", 777);
    fclose(fp);

    fp = fopen("./f.txt", "r");
    //int c;
    //while ((c = fgetc(fp)) != EOF) {
    const size_t BUF_SIZE = 1024;
    char buf[BUF_SIZE];
    while (fgets(buf, BUF_SIZE, fp)) {
        cout << buf;
    }
    fclose(fp);
    */

    //
    /*ofstream ofile("f.txt");
    if (ofile.is_open()) {
        ofile << "hello"
                << "123" << endl
                << "qwerty" << endl;
        ofile.close();
    }

    ifstream ifile("f.txt");
    string line;
    if (ifile.is_open()) {
        while (ifile.good()) {
            getline(ifile, line);
            cout << line << endl;
        }
        ifile.close();
    }*/

    return 0;
}
